
// 场景描述:


// 假设我们有一个在线商店的系统，用户下单后，系统会按以下步骤处理订单：

// 1. 验证用户的账户是否有效。
// 2. 检查库存是否充足。
// 3. 处理支付。
// 4. 生成订单。

// 每个步骤都是异步的，并且每一步都依赖于前一步的结果。

// 代码实现

// 模拟异步操作的函数
function verifyUser(userId) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(`验证用户 ${userId}`);
            if (userId === 1) {
                resolve({ userId, verified: true })
            } else {
                reject('用户验证失败')
            }
        }, 1000);

    })
}

function checkInventory(productId) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(`检查库存 产品ID: ${productId}`);
            const inventory = 10; // 模拟库存数量
            if (inventory > 0) {
                resolve({ productId, inStock: true });
            } else {
                reject('库存不足');
            }
        }, 1000);
    });
}

function processPayment(userId, amount) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(`处理支付 用户ID: ${userId} 支付金额: $${amount}`);
            if (amount > 0) {
                resolve({ userId, amount, paymentStatus: '成功' });
            } else {
                reject('支付失败');
            }
        }, 1000);
    });
}

function generateOrder(userId, productId) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(`生成订单 用户ID: ${userId} 产品ID: ${productId}`);
            resolve({ orderId: Math.floor(Math.random() * 10000), userId, productId });
        }, 1000);
    });
}

// 链式调用实现订单处理流程
const userId = 1;
const productId = 101;
const paymentAmount = 99.99;

verifyUser(userId)
    .then(user => {
        return checkInventory(productId);
    })
    .then(product => {
        return processPayment(userId, paymentAmount);
    })
    .then(payment => {
        return generateOrder(userId, productId);
    })
    .then(order => {
        console.log('订单处理成功:', order);
    })
    .catch(error => {
        console.error('订单处理失败:', error);
    });

